/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.upn.sigemfi.seg.beans;

import edu.upn.sigemfi.seg.bc.GrupoDelegate;
import edu.upn.sigemfi.seg.bc.UsuarioDelegate;
import edu.upn.sigemfi.seg.be.Grupo;
import edu.upn.sigemfi.seg.be.Usuario;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;

/**
 *
 * @author Administrador
 */
public class UsuarioController extends AbstractController {

    private UsuarioDelegate delegado;
    private GrupoDelegate delegadoGrupo;
    private Usuario usuario;
    private Grupo[] gruposSeleccionados;
    private Grupo[] gruposAsignados;

    public UsuarioController() {
        delegado = new UsuarioDelegate();
        delegadoGrupo = new GrupoDelegate();
    }

    public List<Usuario> getUsuarios() {
        try {
            return delegado.listar();
        } catch (Exception e) {
            error(e.getMessage());
        }
        return null;
    }

    public String nuevo() {
        usuario = new Usuario();
        return "nuevo";
    }

    public String registrar() {
        try {
            delegado.crear(usuario);
            info("El usuario se registró correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "volver";
    }

    public String actualizar() {
        try {
            delegado.editar(usuario);
            info("El usuario se actualizó correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "volver";
    }

    public String eliminar() {
        try {
            delegado.eliminar(usuario);
            info("El usuario se eliminó correctamente");
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "volver";
    }

    public Usuario buscar(Long codigo) {
        try {
            return delegado.buscar(codigo);
        } catch (Exception e) {
            error(e.getMessage());
        }
        return null;
    }

    public SelectItem[] getGruposSI() {
        SelectItem[] select = null;
        try {
            List<Grupo> lista = delegadoGrupo.listar();
            if (lista != null) {
                if (lista.size() > 0) {
                    select = new SelectItem[lista.size()];
                    gruposSeleccionados = new Grupo[lista.size()];
                    int i = 0;
                    for (Grupo g : lista) {
                        select[i++] = new SelectItem(g, g.getNomGrupo());
                    }

                    if (gruposAsignados.length > 0) {
                        i = 0;
                        for (Grupo ga : gruposAsignados) {
                            gruposSeleccionados[i++] = ga;
                        }
                    }
                } else {
                    select = new SelectItem[1];
                    select[0] = new SelectItem(null, "No se encontraron grupos");
                }
            } else {
                select = new SelectItem[1];
                select[0] = new SelectItem(null, "No se encontraron grupos");
            }
        } catch (Exception e) {
            error(e.getMessage());
            select = new SelectItem[1];
            select[0] = new SelectItem(null, "Hubo un error al momento de traer los datos");
        }
        return select;
    }

    public String asignar() {
        try {
            if (gruposSeleccionados != null && gruposSeleccionados.length > 0) {
                if (usuario.getGrupos() == null) {
                    usuario.setGrupos(new ArrayList<Grupo>());
                }

                usuario.getGrupos().clear();

                for (Grupo g : gruposSeleccionados) {
                    usuario.getGrupos().add(g);
                }
                delegado.editar(usuario);

                info("Se han asignado con éxito el(los) grupo(s) al usuario " + usuario.getNameUsuario() + ".");
                gruposSeleccionados = null;
            } else {
                warn("Asegúrese de haber seleccionado como mínimo un grupo.");
                return "";
            }
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "volver";
    }

    public String prepararAsignacion() {
        try {
            if (usuario != null) {
                if (usuario.getGrupos() != null) {
                    if (usuario.getGrupos().size() > 0) {
                        gruposAsignados = new Grupo[usuario.getGrupos().size()];
                        int i = 0;
                        for (Grupo ga : usuario.getGrupos()) {
                            gruposAsignados[i++] = ga;
                        }
                    } else {
                        warn("El usuario no tiene grupos asignados.");
                        return "";
                    }
                } else {
                    warn("El usuario no tiene grupos asignados.");
                    return "";
                }
            } else {
                warn("Asegúrese de haber seleccionado un usuario.");
                return "";
            }
        } catch (Exception e) {
            error(e.getMessage());
        }
        return "asignar";
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public Grupo[] getGruposSeleccionados() {
        return gruposSeleccionados;
    }

    public void setGruposSeleccionados(Grupo[] gruposSeleccionados) {
        this.gruposSeleccionados = gruposSeleccionados;
    }
}
